package cn.tju.leavingsystem.service.impl;

import cn.tju.leavingsystem.dao.StaffDao;
import cn.tju.leavingsystem.entity.Staff;
import cn.tju.leavingsystem.service.StaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class StaffServiceImpl implements StaffService {

    @Autowired
    private StaffDao staffDao;

    /**
     * 列出所有的员工
     *
     * @return List<Staff>
     */
    @Override
    public List<Staff> getStaffList() {
        return staffDao.queryStaff();
    }

    /**
     * 通过id得到员工信息
     *
     * @param staffId 员工id
     * @return Staff对象
     */
    @Override
    public Staff getStaffById(int staffId) {
        return staffDao.queryStaffById(staffId);
    }

    /**
     * 注册新的员工
     *
     * @param staff 员工对象
     * @return 是否注册成功
     */
    @Transactional
    @Override
    public boolean addStaff(Staff staff) {
        //空值判断：必选项不能为空
        if(staff.getStaffName() != null && !"".equals(staff.getStaffName()) &&
           staff.getSex() != null && !"".equals(staff.getSex()) &&
           staff.getPassword() != null && !"".equals(staff.getPassword())
        ){
            try{
                int effectNum = staffDao.insertStaff(staff);
                if(effectNum >0){
                    return true;
                }else{
                    throw new RuntimeException("注册员工失败");
                }
            }catch (Exception e){
                throw new RuntimeException("注册员工失败：" + e.getMessage());
            }
        }else{
            throw new RuntimeException("必填信息不能为空！" );
        }
    }

    /**
     * 修改员工信息
     *
     * @param staff 员工对象
     * @return 是否修改成功
     */
    @Override
    public boolean modifyStaff(Staff staff) {
        if(staff.getStaffId() >= 1000){
            try{
                int effectedNum = staffDao.updateStaff(staff);
                if(effectedNum >0){
                    return true;
                }else{
                    throw new RuntimeException("修改员工信息失败");
                }
            }catch (Exception e){
                throw new RuntimeException("修改员工信息失败:" + e.getMessage());
            }
        }else{
            throw new RuntimeException("员工信息不能为空");
        }
    }

    /**
     * 删除员工信息
     *
     * @param staffId 员工id
     * @return 是否删除成功
     */
    @Override
    public boolean removeStaff(int staffId) {
        if(staffId >= 1000){
            try{
                int effectNum = staffDao.deleteStaff(staffId);
                if(effectNum > 0){
                    return true;
                }else {
                    throw new RuntimeException("删除员工信息失败");
                }
            }catch (Exception e){
                throw new RuntimeException("删除员工信息失败" + e.getMessage());
            }
        }else{
            throw new RuntimeException("不存在该员工");
        }
    }
}